package chemtools_logica.BDL.SFBean;

import chemtools_logica.BDL.IL.BDL_SFUsuarioLocal;
import chemtools_logica.BDL.IR.BDL_SFUsuarioRemote;


import chemtools_logica.Entidades.Almacen;
import chemtools_logica.Entidades.Tipoproducto;

import chemtools_logica.Beans.UsuarioBean;


import chemtools_logica.Entidades.Evento;
import chemtools_logica.Entidades.Usuario;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "BDL_SFUsuario", mappedName = "map-BDL_SFUsuario")
public class BDL_SFUsuarioBean implements BDL_SFUsuarioRemote, BDL_SFUsuarioLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    public BDL_SFUsuarioBean() {
    }

    public Usuario persistUsuario(Usuario usuario) {
        em.persist(usuario);
        em.flush();
        return usuario;
    }

    public Usuario mergeUsuario(Usuario usuario) {
        return em.merge(usuario);
    }

    public void removeUsuario(Usuario usuario) {
        usuario = em.find(Usuario.class, usuario.getIdUsuario());
        em.remove(usuario);
    }

    /** <code>select o from Usuario o</code> */
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Usuario> getUsuarioFindAll() {
        return em.createNamedQuery("Usuario.findAll", Usuario.class).getResultList();
    }

    public Usuario loginUsuario(String usuario, String contrasena) {
        Usuario user = null;

        String ejbQuery =
            "SELECT u FROM Usuario u " + "WHERE u.nombre_Usuario = :usuario " + "AND u.clave = :clave " +
            "AND u.estado = 1";
        try {
            Query query = em.createQuery(ejbQuery);
            query.setParameter("usuario", usuario);
            query.setParameter("clave", contrasena);
            user = (Usuario) query.getSingleResult();
        } catch (Exception e) {
            user = null;
        }

        return user;
    }

    public List<Usuario> buscarUsuarios(Usuario usuario) {
        String ejb = "Select u from Usuario u,Persona p where 1=1 and u.persona.idPersona=p.idPersona ";
        if (usuario.getIdUsuario() != 0) {
            ejb += "and u.idUsuario=" + usuario.getIdUsuario() + " ";
        }
        if (usuario.getPersona().getNombre() != null && !usuario.getPersona().getNombre().equals("")) {
            ejb += "and u.persona.nombre like '%" + usuario.getPersona().getNombre() + "%' ";
        }
        if (usuario.getPersona().getApellido() != null && !usuario.getPersona().getApellido().equals("")) {
            ejb += "and u.persona.apellido like '%" + usuario.getPersona().getApellido() + "%' ";
        }
        if (usuario.getPersona().getDni() != null && !usuario.getPersona().getDni().equals("")) {
            ejb += "and u.persona.dni like '%" + usuario.getPersona().getDni() + "%' ";
        }
        if (usuario.getNombre_Usuario()!= null && !usuario.getNombre_Usuario().equals("")) {
            ejb += "and u.nombre_Usuario ='" + usuario.getNombre_Usuario() + "' ";
        }
        if (usuario.getEstado()!= -1) {
            ejb += "and u.estado =" + usuario.getEstado() + " ";
        }
        System.out.print(ejb);
        return em.createQuery(ejb, Usuario.class).getResultList();
    }

    
//Metodo para evento
    
     public List<Usuario> getUsuarioPersonaActivos(){
        List<Usuario> usuario = new ArrayList<Usuario>();
        String ejb = "SELECT u.* FROM usuario u INNER JOIN persona m " + 
                     " INNER JOIN usuarioxrol ur " + 
                     " INNER JOIN rol r " + 
                     " ON m.idPersona = u.idPersona " + 
                     " AND ur.idUsuario=u.idUsuario " + 
                     " AND r.idRol=ur.idRol";
        try{
            Query query = em.createNativeQuery(ejb, Usuario.class);            
            usuario = query.getResultList();
            
            return usuario;
        }catch(Exception e)
        {
            usuario = null;
        }
        return usuario;

    }
    public List<Usuario> getAllUsuariosActivos(){
        List<Usuario> listaEntidad = new ArrayList<Usuario>();
        
        String ejb="SELECT u FROM Usuario  u where u.estado = 1";
        
        try{
        Query query = em.createQuery(ejb);
        listaEntidad = query.getResultList();
        }catch(Exception e){
        }
        
        return listaEntidad;
    }
    
    public List<Usuario> getListBusquedaUsuarios(Usuario entidadUsuario , Evento entidadEvento){
        List<Usuario> usuario = new ArrayList<Usuario>();
        String ejb="SELECT u.* FROM usuario u " + 
                    
                    " INNER JOIN persona p " + 
                    " ON u.idPersona = p.idPersona ";
        if(entidadEvento.getIdEvento() != 0){
            ejb+=   " INNER JOIN eventoxusuario eu " + 
                    " ON eu.idUsuario = u.idUsuario " + 
                    " INNER JOIN evento e " + 
                    " ON eu.idEvento = e.idEvento "; 
        }
            ejb+=   " WHERE 1=1" ;
        
        if(entidadUsuario.getIdUsuario()!= 0){
            ejb+= " AND u.idUsuario =" + entidadUsuario.getIdUsuario() ;
        }
        if(entidadEvento.getIdEvento() != 0){
            ejb+= " AND e.idEvento =" + entidadEvento.getIdEvento();
        }
        
        
        
        try{
            Query query = em.createNativeQuery(ejb, Usuario.class);            
            usuario = query.getResultList();
            
            return usuario;
        }catch(Exception e)
        {
            usuario = null;
        }
        return usuario;
        
    }


    
    public  List<Usuario> existeNombre(UsuarioBean usuario){
            String ejb = "Select u from Usuario u where 1=1 ";   
            if (usuario.getIdUsuario() != 0) {
                ejb += "and u.idUsuario!=" + usuario.getIdUsuario() + " ";
            }
            if (usuario.getNombre_Usuario()!= null && !usuario.getNombre_Usuario().equals("")) {
                ejb += "and u.nombre_Usuario ='" + usuario.getNombre_Usuario() + "' ";
            }
            System.out.print(ejb);
            return em.createQuery(ejb, Usuario.class).getResultList();
    }
    

}
